<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="juMeq" id="juMeq"><span data-lake-id="u5cb424f3" id="u5cb424f3">典型回答</span></h1>
  <p data-lake-id="ua38505fc" id="ua38505fc"><br></p>
  <p data-lake-id="u755ad4a8" id="u755ad4a8"><strong><span data-lake-id="u81e02dd7" id="u81e02dd7">实体通常指具有唯一标识的具体对象或事物</span></strong><span data-lake-id="ue967c043" id="ue967c043">。实体通常具有自己的生命周期，可以被创建、修改和删除。在数据库中，实体通常对应着数据库表的一行记录，每个实体具有唯一的标识符（通常是主键）。</span></p>
  <p data-lake-id="ufced6920" id="ufced6920"><span data-lake-id="u2b3de568" id="u2b3de568">​</span><br></p>
  <p data-lake-id="ud17441fa" id="ud17441fa"><span data-lake-id="u932f5105" id="u932f5105">比如，一个人可以被视为一个实体，因为每个人都有唯一的身份证号码作为标识符，并且每个人具有自己的生命周期，可以被创建、修改和删除。</span></p>
  <p data-lake-id="u631ab497" id="u631ab497"><span data-lake-id="u4e01b47a" id="u4e01b47a">​</span><br></p>
  <p data-lake-id="u22bae701" id="u22bae701"><strong><span data-lake-id="ueb34a5e3" id="ueb34a5e3">值对象通常指没有唯一标识的对象或数据类型。</span></strong><span data-lake-id="u0c5ce6af" id="u0c5ce6af">值对象通常不可变，一旦创建就不能修改，只能通过创建新的值对象来替换原来的值对象。在数据库中，值对象通常对应着数据库表的一组字段，每个值对象不具有唯一的标识符，而是通过一组字段来描述其属性。</span></p>
  <p data-lake-id="u505f9a9c" id="u505f9a9c"><span data-lake-id="uad38c556" id="uad38c556">​</span><br></p>
  <p data-lake-id="u8504246f" id="u8504246f"><span data-lake-id="u12add274" id="u12add274">比如，一个地址可以被视为一个值对象，因为它没有唯一标识符，而是由一组字段描述，例如国家、省份、城市、街道和门牌号等。并且地址通常是不可变的，一旦创建就不能修改，只能通过创建新的地址对象来替换原来的地址对象。</span></p>
  <p data-lake-id="uf0abc2f2" id="uf0abc2f2"><br></p>
  <h1 data-lake-id="YjXfs" id="YjXfs"><span data-lake-id="u93ebbbcd" id="u93ebbbcd">扩展知识</span></h1>
  <p data-lake-id="u05c23a94" id="u05c23a94"><br></p>
  <h2 data-lake-id="dX2ek" id="dX2ek"><span data-lake-id="udc609f92" id="udc609f92">举例说明实体和值对象</span></h2>
  <p data-lake-id="u7d722d04" id="u7d722d04"><br></p>
  <p data-lake-id="ufc8b4c61" id="ufc8b4c61"><span data-lake-id="u1818b057" id="u1818b057">假设我们正在设计一个电商系统，需要设计一个订单类。订单包含多个订单项，每个订单项对应着购买了某个商品的数量和价格。</span></p>
  <p data-lake-id="u1c931302" id="u1c931302"><span data-lake-id="u4b12f1b9" id="u4b12f1b9">​</span><br></p>
  <p data-lake-id="u43e178a5" id="u43e178a5"><span data-lake-id="ua1a7c4fc" id="ua1a7c4fc">首先，我们定义一个订单项类，它包含订单号、商品名称、数量和单价4个属性，并且它们都是可变的，因为每个订单项都可以修改：</span></p>
  <p data-lake-id="ubb2504ef" id="ubb2504ef"><span data-lake-id="u6f75ae91" id="u6f75ae91">​</span><br></p>
  <pre lang="java"><code>
public class OrderItem {
    private String productName;
    private int quantity;
    private BigDecimal unitPrice;
  	privatr String orderNo;
    //setter 和 getter
}

</code></pre>
  <p data-lake-id="uc97f42cd" id="uc97f42cd"><br></p>
  <p data-lake-id="u22e99163" id="u22e99163"><span data-lake-id="udf20acdf" id="udf20acdf">然后，我们定义一个订单类，它包含订单号、订单项列表、订单状态和订单总价四个属性。</span></p>
  <p data-lake-id="u79044d62" id="u79044d62"><br></p>
  <pre lang="java"><code>
public class Order {
    private long orderId; // 实体
    private List&lt;OrderItem&gt; orderItems; // 值对象
    private OrderStatus status; 
    private BigDecimal totalPrice; 
}

</code></pre>
  <p data-lake-id="u01f4334d" id="u01f4334d"><span data-lake-id="uca084bed" id="uca084bed">​</span><br></p>
  <p data-lake-id="ud9f56aa9" id="ud9f56aa9"><span data-lake-id="u08e10528" id="u08e10528">我们在数据库中存储订单的时候，可以这样存储：</span></p>
  <p data-lake-id="u7de942bb" id="u7de942bb"><span data-lake-id="uf049df66" id="uf049df66">​</span><br></p>
  <table data-lake-id="foq3S" id="foq3S" margin="true" width-mode="contain" class="lake-table" style="width: 697px">
   <colgroup>
    <col width="150">
    <col width="150">
    <col width="147">
    <col width="250">
   </colgroup>
   <tbody>
    <tr data-lake-id="u409251bd" id="u409251bd">
     <td data-lake-id="u049cff20" id="u049cff20">
      <p data-lake-id="u8b64facd" id="u8b64facd"><span data-lake-id="uffeccf32" id="uffeccf32">orderId</span></p></td>
     <td data-lake-id="ub7ae9b3d" id="ub7ae9b3d">
      <p data-lake-id="u52bb2a34" id="u52bb2a34"><span data-lake-id="u0b52d169" id="u0b52d169">status</span></p></td>
     <td data-lake-id="ue12f431d" id="ue12f431d">
      <p data-lake-id="u1f1292ee" id="u1f1292ee"><span data-lake-id="u4867c201" id="u4867c201">totalPrice</span></p></td>
     <td data-lake-id="u7abeab7f" id="u7abeab7f">
      <p data-lake-id="ub04489ed" id="ub04489ed"><span data-lake-id="uc12ec1a7" id="uc12ec1a7">orderItems</span></p></td>
    </tr>
    <tr data-lake-id="uee18be9b" id="uee18be9b">
     <td data-lake-id="u9b6d6c6f" id="u9b6d6c6f">
      <p data-lake-id="ud027e604" id="ud027e604"><span data-lake-id="u5c839588" id="u5c839588">2023021811223344</span></p></td>
     <td data-lake-id="u9dfb9607" id="u9dfb9607">
      <p data-lake-id="u52f8c6cf" id="u52f8c6cf"><span data-lake-id="ua885b06a" id="ua885b06a">CONFIRMED</span></p></td>
     <td data-lake-id="u47f2410a" id="u47f2410a">
      <p data-lake-id="u511b6bf2" id="u511b6bf2"><span data-lake-id="u95af6699" id="u95af6699">120</span></p></td>
     <td data-lake-id="u4a542563" id="u4a542563">
      <p data-lake-id="u6119b8ff" id="u6119b8ff"><span data-lake-id="ue1d0af23" id="ue1d0af23">{"productName":"《深入理解Java核心技术》 作者 Hollis","quantity":100,"unitPrice":129}</span></p></td>
    </tr>
   </tbody>
  </table>
  <p data-lake-id="uba348ac0" id="uba348ac0"><br></p>
  <p data-lake-id="ue8620d92" id="ue8620d92"><span data-lake-id="ue1c3625c" id="ue1c3625c">以上，订单就是一个实体，因为每一个订单对应一个单独的数据库记录，并且有唯一表示，就是订单号。而订单条目就是值对象，他是依赖于实体进行存储的。</span></p>
  <p data-lake-id="uaaaa2553" id="uaaaa2553"><span data-lake-id="ud6df033e" id="ud6df033e">​</span><br></p>
  <p data-lake-id="u5a1cf728" id="u5a1cf728"><span data-lake-id="u407e0059" id="u407e0059">在数据库中把数据取出来的时候，是可以把orderItems这个json类型的字段转成我们定义好的OrderItem的对象的。这样更方便我们进行操作。</span></p>
 </body>
</html>